package com.zgkj.Zip.tools;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.InputStream;
import java.io.PrintWriter;



public class FileOperate {
  public FileOperate() {
  }

  /**
    * 新建目录
    *
    * @param folderPath
    *            String 如 c:/fqf
    * @return boolean
    */
   public void newFolder(String folderPath) {
       try {
           File myFilePath = new File(folderPath);
           if (!myFilePath.exists()) {
               myFilePath.mkdir();
           }
       } catch (Exception e) {
           System.out.println("新建目录操作出错 ");
           e.printStackTrace();
       }
   }

   /**
    * 新建文件
    *
    * @param filePathAndName
    *            String 文件路径及名称 如c:/fqf.txt
    * @param fileContent
    *            String 文件内容
    * @return boolean
    */
   public void newFile(String filePathAndName, String fileContent) {
       try {
           File myFilePath = new File(filePathAndName);
           if (!myFilePath.exists()) {
               myFilePath.createNewFile();
           }
           FileWriter resultFile = new FileWriter(myFilePath);
           PrintWriter myFile = new PrintWriter(resultFile);
           myFile.println(fileContent);
           resultFile.close();
       } catch (Exception e) {
           System.out.println("新建文件操作出错 ");
           e.printStackTrace();
       }
   }

   /**
    * 删除文件
    *
    * @param filePathAndName
    *            String 文件路径及名称 如c:/fqf.txt
    * @param fileContent
    *            String
    * @return boolean
    */
   public static void delFile(String filePathAndName) {
       try {
           File myDelFile = new File(filePathAndName);
           myDelFile.delete();
       } catch (Exception e) {
           System.out.println("删除文件操作出错 ");
           e.printStackTrace();
       }
   }

   /**
    * 删除文件夹
    *
    * @param filePathAndName
    *            String 文件夹路径及名称 如c:/fqf
    * @param fileContent
    *            String
    * @return boolean
    */
   public static void delFolder(String folderPath) {
       try {
           delAllFile(folderPath); // 删除完里面所有内容
           File myFilePath = new File(folderPath);
           myFilePath.delete(); // 删除空文件夹
       } catch (Exception e) {
           System.out.println("删除文件夹操作出错 ");
           e.printStackTrace();
       }
   }

   /**
    * 删除文件夹里面的所有文件
    *
    * @param path
    *            String 文件夹路径 如 c:/fqf
    */
   public static void delAllFile(String path) {
       File file = new File(path);
        if (!file.exists() || !file.isDirectory()) {
            return;
        }
        String[] tempList = file.list();
        File temp = null;
        for (String element : tempList) {
            if (path.endsWith(File.separator)) {
                temp = new File(path + element);
            } else {
                temp = new File(path + File.separator + element);
            }
            if (temp.isFile()) {
                temp.delete();
            }
            if (temp.isDirectory()) {
                delAllFile(path + "/" + element);// 先删除文件夹里面的文件
                delFolder(path + "/" + element);// 再删除空文件夹
            }
        }
    }

    /**
     * 复制单个文件
     *
     * @param oldPath
     *            String 原文件路径 如：c:/fqf.txt
     * @param newPath
     *            String 复制后路径 如：f:/fqf.txt
     * @return boolean
     */
    public void copyFile(String oldPath, String newPath) {
        try {
            int bytesum = 0;
            int byteread = 0;
            File oldfile = new File(oldPath);
            if (oldfile.exists()) { // 文件存在时
                InputStream inStream = new FileInputStream(oldPath); // 读入原文件
                FileOutputStream fs = new FileOutputStream(newPath);
                byte[] buffer = new byte[1444];
                int length;
                while ((byteread = inStream.read(buffer)) != -1) {
                    bytesum += byteread; // 字节数 文件大小
                    System.out.println(bytesum);
                    fs.write(buffer, 0, byteread);
                }
                inStream.close();
            }
        } catch (Exception e) {
            System.out.println("复制单个文件操作出错 ");
            e.printStackTrace();
        }
    }

    /**
     * 复制整个文件夹内容
     *
     * @param oldPath
     *            String 原文件路径 如：c:/fqf
     * @param newPath
     *            String 复制后路径 如：f:/fqf/ff
     * @return boolean
     */
    public static void copyFolder(String oldPath, String newPath) {
        try {
            (new File(newPath)).mkdirs(); // 如果文件夹不存在 则建立新文件夹
            File a = new File(oldPath);
            String[] file = a.list();
            File temp = null;
            for (String element : file) {
                if (oldPath.endsWith(File.separator)) {
                    temp = new File(oldPath + element);
                } else {
                    temp = new File(oldPath + File.separator + element);
                }

                if (temp.isFile()) {
                    FileInputStream input = new FileInputStream(temp);
                    FileOutputStream output = new FileOutputStream(newPath + "/" + (temp.getName()).toString());
                    byte[] b = new byte[1024 * 5];
                    int len;
                    while ((len = input.read(b)) != -1) {
                        output.write(b, 0, len);
                    }
                    output.flush();
                    output.close();
                    input.close();
                }
                if (temp.isDirectory()) {// 如果是子文件夹
                    copyFolder(oldPath + "/" + element, newPath + "/" + element);
                }
            }
        } catch (Exception e) {
            System.out.println("复制整个文件夹内容操作出错 ");
            e.printStackTrace();

        }

    }

    /**
     * 移动文件到指定目录
     *
     * @param oldPath
     *            String 如：c:/fqf.txt
     * @param newPath
     *            String 如：d:/fqf.txt
     */
    public void moveFile(String oldPath, String newPath) {
        copyFile(oldPath, newPath);
        delFile(oldPath);
    }

    /**
     * 移动文件到指定目录
     *
     * @param oldPath
     *            String 如：c:/fqf.txt
     * @param newPath
     *            String 如：d:/fqf.txt
     */
    public static void moveFolder(String oldPath, String newPath) {
        copyFolder(oldPath, newPath);
        delFolder(oldPath);

    }
    public static void main(String[] args) {
    	moveFolder("D:/550161910/cpc案卷样式/","D:/");
	}

}
